package com.ruoyi.appService.mentalTestResult.mbtiResult.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.List;

import com.ruoyi.appService.wxuser.domain.ZWxuser;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.framework.web.service.WxTokenService;
import com.ruoyi.framework.web.service.wxUserRedis;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.appService.mentalTestResult.mbtiResult.mapper.ZTestMbtiTestresultMapper;
import com.ruoyi.appService.mentalTestResult.mbtiResult.domain.ZTestMbtiTestresult;
import com.ruoyi.appService.mentalTestResult.mbtiResult.service.IZTestMbtiTestresultService;

import javax.servlet.http.HttpServletRequest;

/**
 * mbti测试结果Service业务层处理
 *
 * @author anjiao
 * @date 2025-05-14
 */
@Service
public class ZTestMbtiTestresultServiceImpl extends ServiceImpl<ZTestMbtiTestresultMapper, ZTestMbtiTestresult> implements IZTestMbtiTestresultService {
    @Autowired
    private ZTestMbtiTestresultMapper zTestMbtiTestresultMapper;
    @Autowired
    private WxTokenService wxTokenService;

    /**
     * 查询mbti测试结果
     *
     * @param id mbti测试结果主键
     * @return mbti测试结果
     */
    @Override
    public ZTestMbtiTestresult selectZTestMbtiTestresultById(Long id) {
        return zTestMbtiTestresultMapper.selectZTestMbtiTestresultById(id);
    }

    /**
     * 查询mbti测试结果列表
     *
     * @param zTestMbtiTestresult mbti测试结果
     * @return mbti测试结果
     */
    @Override
    public List<ZTestMbtiTestresult> selectZTestMbtiTestresultList(ZTestMbtiTestresult zTestMbtiTestresult) {
        return zTestMbtiTestresultMapper.selectZTestMbtiTestresultList(zTestMbtiTestresult);
    }

    /**
     * 新增mbti测试结果
     *
     * @param zTestMbtiTestresult mbti测试结果
     * @return 结果
     */
    @Override
    public int insertZTestMbtiTestresult(ZTestMbtiTestresult zTestMbtiTestresult) {
            return zTestMbtiTestresultMapper.insertZTestMbtiTestresult(zTestMbtiTestresult);
    }

    /**
     * 修改mbti测试结果
     *
     * @param zTestMbtiTestresult mbti测试结果
     * @return 结果
     */
    @Override
    public int updateZTestMbtiTestresult(ZTestMbtiTestresult zTestMbtiTestresult) {
        return zTestMbtiTestresultMapper.updateZTestMbtiTestresult(zTestMbtiTestresult);
    }

    /**
     * 批量删除mbti测试结果
     *
     * @param ids 需要删除的mbti测试结果主键
     * @return 结果
     */
    @Override
    public int deleteZTestMbtiTestresultByIds(Long[] ids) {
        return zTestMbtiTestresultMapper.deleteZTestMbtiTestresultByIds(ids);
    }

    /**
     * 删除mbti测试结果信息
     *
     * @param id mbti测试结果主键
     * @return 结果
     */
    @Override
    public int deleteZTestMbtiTestresultById(Long id) {
        return zTestMbtiTestresultMapper.deleteZTestMbtiTestresultById(id);
    }



   //    给小程序端提供的新增或修改测试结果
    @Override
    public void addOrupdateMbtiTestResult(ZTestMbtiTestresult zTestMbtiTestresult , HttpServletRequest request) {


//        先获取用户id
        String token = wxTokenService.getToken(request);
        wxUserRedis wxuserRedis = wxTokenService.getwxUser(token);
        int userId=wxuserRedis.getUserId();




//根据userid判断用户是否做过测试
        QueryWrapper qw1 = new QueryWrapper<>();
        qw1.eq("userid", userId);
        ZTestMbtiTestresult   isExist  = zTestMbtiTestresultMapper.selectOne(qw1);
        if (StringUtils.isNotNull(isExist)) {
//            已经做过测试，执行修改逻辑

            UpdateWrapper<ZTestMbtiTestresult> updateWrapper = new UpdateWrapper<>();
            updateWrapper.eq("userid", userId);
            zTestMbtiTestresultMapper.update(zTestMbtiTestresult, updateWrapper);



        }else{
//            第一次做测试，执行新增逻辑
            zTestMbtiTestresult.setUserid ((long) userId);
            zTestMbtiTestresultMapper.insertZTestMbtiTestresult(zTestMbtiTestresult);
        }

    }

    @Override
    public AjaxResult selectTestResult(HttpServletRequest request) {
        //        先获取用户id
        String token = wxTokenService.getToken(request);
        wxUserRedis wxuserRedis = wxTokenService.getwxUser(token);
        int userId=wxuserRedis.getUserId();

        //查询测试结果
        QueryWrapper qw1 = new QueryWrapper<>();
        qw1.eq("userid", userId);
        ZTestMbtiTestresult   testresult  = zTestMbtiTestresultMapper.selectOne(qw1);

        if(StringUtils.isNull(testresult)){
         return AjaxResult.error("该用户没有进行测试");
        }else {
            return  AjaxResult.success(testresult);
        }
    }
}